package com.ylr.admin.common.enums;

import com.ylr.base.common.dto.NameValue;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wyw
 * date: 2023-05-09 15:12:30
 * className: MenuEnum
 * version: 1.0
 * description:
 */
@Getter
@AllArgsConstructor
public enum MenuEnum {
    // 默认枚举值
    NULL(null, null),

    /*
        系统菜单表字段字典值
     */

    // 菜单类型[0-目录 1-菜单]
    PACKET_TYPE(0, "目录"), PAGE_TYPE(1, "菜单"),
    // 是否外链[0-否 1-是]
    IFRAME_NO(0, "否"), IFRAME_YES(1, "是"),
    // 显示状态[0-显示 1-隐藏]
    DISPLAY_YES(0, "显示"), DISPLAY_NO(1, "隐藏"),
    ;

    /**
     * 值
     */
    private final Integer value;

    /**
     * 名称
     */
    private final String name;

    /**
     * 获取菜单类型枚举对象列表
     */
    public static List<NameValue<Integer>> getTypeEnumList() {
        List<NameValue<Integer>> list = new ArrayList<>();
        list.add(new NameValue<>(PACKET_TYPE.name, PACKET_TYPE.value));
        list.add(new NameValue<>(PAGE_TYPE.name, PAGE_TYPE.value));
        return list;
    }

    /**
     * 获取菜单类型枚举对象
     * @param value 值
     * @return 菜单类型枚举对象
     */
    public static MenuEnum getTypeEnum(Integer value) {
        if (PACKET_TYPE.value.equals(value)) {
            return PACKET_TYPE;
        }
        if (PAGE_TYPE.value.equals(value)) {
            return PAGE_TYPE;
        }
        return NULL;
    }

    /**
     * 校验菜单类型值
     * @param value 值
     * @return true-正确 false-错误
     */
    public static boolean isTypeFail(Integer value) {
        return getTypeEnum(value) == NULL;
    }

    /**
     * 获取菜单是否外链枚举对象列表
     */
    public static List<NameValue<Integer>> getIframeStatusEnumList() {
        List<NameValue<Integer>> list = new ArrayList<>();
        list.add(new NameValue<>(IFRAME_NO.name, IFRAME_NO.value));
        list.add(new NameValue<>(IFRAME_YES.name, IFRAME_YES.value));
        return list;
    }

    /**
     * 获取菜单是否外链枚举对象
     * @param value 值
     * @return 菜单是否外链枚举对象
     */
    public static MenuEnum getIframeStatusEnum(Integer value) {
        if (IFRAME_NO.value.equals(value)) {
            return IFRAME_NO;
        }
        if (IFRAME_YES.value.equals(value)) {
            return IFRAME_YES;
        }
        return NULL;
    }

    /**
     * 校验菜单是否外链值
     * @param value 值
     * @return true-正确 false-错误
     */
    public static boolean isIframeStatusFail(Integer value) {
        return getIframeStatusEnum(value) == NULL;
    }

    /**
     * 获取菜单是否外链枚举对象列表
     */
    public static List<NameValue<Integer>> getDisplayStatusEnumList() {
        List<NameValue<Integer>> list = new ArrayList<>();
        list.add(new NameValue<>(DISPLAY_YES.name, DISPLAY_YES.value));
        list.add(new NameValue<>(DISPLAY_NO.name, DISPLAY_NO.value));
        return list;
    }

    /**
     * 获取菜单显示状态枚举对象
     * @param value 值
     * @return 菜单显示状态枚举对象
     */
    public static MenuEnum getDisplayStatusEnum(Integer value) {
        if (DISPLAY_YES.value.equals(value)) {
            return DISPLAY_YES;
        }
        if (DISPLAY_NO.value.equals(value)) {
            return DISPLAY_NO;
        }
        return NULL;
    }

    /**
     * 校验菜单显示状态值
     * @param value 值
     * @return true-正确 false-错误
     */
    public static boolean isDisplayStatusFail(Integer value) {
        return getDisplayStatusEnum(value) == NULL;
    }

}
